const robot = require('robotjs');
const fs = require('fs');
const { PNG } = require('pngjs');

// 延迟函数
function delay(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

// 截取部分区域屏幕的函数
async function capturePartialScreen(x, y, width, height) {
    try {
        // 截取指定区域的屏幕
        const screenshot = robot.screen.capture(x, y, width, height);

        // 创建 PNG 对象
        const png = new PNG({ width, height });

        // 将截图数据复制到 PNG 对象
        for (let yIndex = 0; yIndex < height; yIndex++) {
            for (let xIndex = 0; xIndex < width; xIndex++) {
                const pos = (yIndex * width + xIndex) * 4;
                const imgPos = (yIndex * width + xIndex) * 4;
                // 注意：robotjs 返回的像素数据是 BGRA 格式，需要转换为 RGBA
                const b = screenshot.image.readUInt8(imgPos);
                const g = screenshot.image.readUInt8(imgPos + 1);
                const r = screenshot.image.readUInt8(imgPos + 2);
                const a = screenshot.image.readUInt8(imgPos + 3);

                png.data[pos] = r; // Red
                png.data[pos + 1] = g; // Green
                png.data[pos + 2] = b; // Blue
                png.data[pos + 3] = a; // Alpha
            }
        }

        // 生成当前时间戳作为文件名
        const timestamp = new Date().getTime();
        const filePath = `./partial_screenshot_${timestamp}.png`;

        // 将 PNG 对象保存为文件
        const out = fs.createWriteStream(filePath);
        png.pack().pipe(out);

        await new Promise((resolve, reject) => {
            out.on('finish', resolve);
            out.on('error', reject);
        });

        console.log(`部分区域截图已保存到 ${filePath}`);
    } catch (error) {
        console.error('部分区域截图失败:', error);
    }
}

// 示例：从坐标 (100, 100) 开始，截取宽度为 200，高度为 300 的区域
capturePartialScreen(100, 100, 2560, 1600);